package com.c2b.algorithm.leetcode.base;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * <a href='https://leetcode.cn/problems/uncommon-words-from-two-sentences/'>两句话中的不常见单词(Uncommon Words from Two Sentences)</a>
 * <p>句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。</p>
 * <p>如果某个单词在其中一个句子中恰好出现一次，在另一个句子中却 没有出现 ，那么这个单词就是 不常见的 。</p>
 * <p>给你两个 句子 s1 和 s2 ，返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：s1 = "this apple is sweet", s2 = "this apple is sour"
 *      输出：["sweet","sour"]
 *
 * 示例 2：
 *      输入：s1 = "apple apple", s2 = "banana"
 *      输出：["banana"]
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= s1.length, s2.length <= 200</li>
 *         <li>s1 和 s2 由小写英文字母和空格组成</li>
 *         <li>s1 和 s2 都不含前导或尾随空格</li>
 *         <li>s1 和 s2 中的所有单词间均由单个空格分隔</li>
 *     </ul>
 * </p>
 *
 * @author c2b
 * @since 2023/12/18 16:06
 */
public class LC0884UncommonWordsFromTwoSentences_S {

    static class Solution {
        public String[] uncommonFromSentences(String s1, String s2) {
            Set<String> uncommonSet = new HashSet<>();
            List<String> resList = new ArrayList<>();
            for (String word : s1.split(" ")) {
                if (uncommonSet.add(word)) {
                    resList.add(word);
                } else {
                    resList.remove(word);
                }
            }
            for (String word : s2.split(" ")) {
                if (uncommonSet.add(word)) {
                    resList.add(word);
                } else {
                    resList.remove(word);
                }
            }
            String[] res = new String[resList.size()];
            for (int i = 0; i < resList.size(); i++) {
                res[i] = resList.get(i);
            }
            return res;
        }
    }
}
